home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / XSLTEngineImpl$StackGuard.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  2.7 KB  |  89 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import java.io.PrintWriter;
  4. import java.io.StringWriter;
  5. import java.util.Stack;
  6. import org.w3c.dom.Element;
  7. import org.w3c.dom.Node;
  8. import org.w3c.dom.Text;
  9.  
  10. class XSLTEngineImpl$StackGuard {
  11.    // $FF: synthetic field
  12.    private final XSLTEngineImpl this$0;
  13.    Node m_xslRule;
  14.    Node m_sourceXML;
  15.    Stack stack;
  16.  
  17.    public XSLTEngineImpl$StackGuard(XSLTEngineImpl var1) {
  18.       this.this$0 = var1;
  19.       this.this$0 = var1;
  20.       this.stack = new Stack();
  21.    }
  22.  
  23.    public XSLTEngineImpl$StackGuard(XSLTEngineImpl var1, Node var2, Node var3) {
  24.       this.this$0 = var1;
  25.       this.this$0 = var1;
  26.       this.stack = new Stack();
  27.       this.m_xslRule = var2;
  28.       this.m_sourceXML = var3;
  29.    }
  30.  
  31.    public boolean equals(Object var1) {
  32.       return ((XSLTEngineImpl$StackGuard)var1).m_xslRule.equals(this.m_xslRule) && ((XSLTEngineImpl$StackGuard)var1).m_sourceXML.equals(this.m_sourceXML);
  33.    }
  34.  
  35.    public void print(PrintWriter var1) {
  36.       if (this.m_sourceXML instanceof Text) {
  37.          Text var3 = (Text)this.m_sourceXML;
  38.          var1.println(var3.getData());
  39.       } else {
  40.          if (this.m_sourceXML instanceof Element) {
  41.             Element var2 = (Element)this.m_sourceXML;
  42.             var1.println(var2.getNodeName());
  43.          }
  44.  
  45.       }
  46.    }
  47.  
  48.    public void checkForInfinateLoop(XSLTEngineImpl$StackGuard var1) {
  49.       int var2 = this.stack.size();
  50.       int var3 = 0;
  51.  
  52.       for(int var4 = var2 - 1; var4 >= 0; --var4) {
  53.          if (this.stack.elementAt(var4).equals(var1)) {
  54.             ++var3;
  55.          }
  56.  
  57.          if (var3 >= XSLTEngineImpl.m_recursionLimit) {
  58.             StringWriter var5 = new StringWriter();
  59.             PrintWriter var6 = new PrintWriter(var5);
  60.             var6.println("Infinite loop diagnosed!  Stack trace:");
  61.  
  62.             int var7;
  63.             for(var7 = 0; var7 < var2; ++var7) {
  64.                var6.println("Source Elem #" + var7 + " ");
  65.                XSLTEngineImpl$StackGuard var8 = (XSLTEngineImpl$StackGuard)this.stack.elementAt(var4);
  66.                var8.print(var6);
  67.             }
  68.  
  69.             var6.println("Source Elem #" + var7 + " ");
  70.             var1.print(var6);
  71.             var6.println("End of infinite loop diagnosis.");
  72.             this.this$0.diag(var5.getBuffer().toString());
  73.             throw new XSLTEngineImpl.XSLInfiniteLoopException(this.this$0);
  74.          }
  75.       }
  76.  
  77.    }
  78.  
  79.    public void push(Node var1, Node var2) {
  80.       XSLTEngineImpl$StackGuard var3 = new XSLTEngineImpl$StackGuard(this.this$0, var1, var2);
  81.       this.checkForInfinateLoop(var3);
  82.       this.stack.push(var3);
  83.    }
  84.  
  85.    public void pop() {
  86.       this.stack.pop();
  87.    }
  88. }
  89.